﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Cotizav.CONEXION;

namespace Cotizav.PRESENTACION.Visita
{
    public partial class AgregarVisita : UserControl
    {
        string idCliente;
        string idVisita;

        CtrlCotizacion ctCotizacion;
        CtrlContactos ctContacto;
        CtrlMotivo ctMotivo;
        CtrlVisita ctVisita;
        CtrlClientes ctCliente;

        public AgregarVisita()
        {
            InitializeComponent();

            idCliente = string.Empty;
            idVisita = string.Empty;

            ctCotizacion = new CtrlCotizacion();
            ctContacto = new CtrlContactos();
            ctMotivo = new CtrlMotivo();
            ctVisita = new CtrlVisita();
            ctCliente = new CtrlClientes();
        }

        public AgregarVisita(string idcliente, string idvisita) : this()
        {
            idCliente = idcliente;
            idVisita = idvisita;
        }

        private void AgregarVisita_Load(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(idCliente))
            {
                //cargamos la informacion del cliente
                CLIENTE cliente = ctCliente.getCliente(idCliente);

                if (cliente != null)
                {
                    txtRuc.Text = cliente.clienteruc.Trim();
                    txtCliente.Text = cliente.razonSocial.Trim();
                    txtFechaRegistroCotizacion.Text = DateTime.Now.Date.ToShortDateString();

                    cmbContacto.DataSource = ctContacto.getListContacto(idCliente);
                    cmbContacto.DisplayMember = "nombre";
                    cmbContacto.ValueMember = "idContacto";
                    cmbContacto.SelectedIndex = -1;

                    cmbMotivo.DataSource = ctMotivo.getListMotivo();
                    cmbMotivo.DisplayMember = "tipoMotivo";
                    cmbMotivo.ValueMember = "idMotivo";
                    cmbMotivo.SelectedIndex = -1;

                    cmbContacto.Enabled = false;
                    txtOtroContacto.Enabled = false;

                    if (!string.IsNullOrWhiteSpace(idVisita))
                    {
                        //cargamos informacion de la visita
                        VISITA visita = ctVisita.getVisita(idVisita);

                        if (visita != null)
                        {
                            if (!string.IsNullOrWhiteSpace(visita.idContacto)) //contacto en lista
                            {
                                cmbContacto.SelectedIndex = cmbContacto.Items.Cast<CONTACTO>().SingleOrDefault(x => x.idContacto == visita.idContacto) != null ? cmbContacto.Items.IndexOf(cmbContacto.Items.Cast<CONTACTO>().SingleOrDefault(x => x.idContacto == visita.idContacto)) : -1;
                            }
                            else //otro contacto
                            {
                                txtOtroContacto.Text = visita.contactoEventual.Trim();
                            }

                            txtFechaRegistroCotizacion.Text = visita.fechaRegistro.HasValue ? visita.fechaRegistro.Value.ToShortDateString() : string.Empty;
                            cmbMotivo.SelectedIndex = cmbMotivo.Items.Cast<MOTIVO>().SingleOrDefault(x => x.idMotivo == visita.idMotivo) != null ? cmbMotivo.Items.IndexOf(cmbMotivo.Items.Cast<MOTIVO>().SingleOrDefault(x => x.idMotivo == visita.idMotivo)) : -1;
                            txtEstado.Text = visita.estado;
                            dateFechaVisita.Value = visita.fechaVisita.Value.Date;
                            txtObservaciones.Text = visita.observaciones.Trim();
                        }
                    }
                }
            }
        }

        internal void setFormReadOnly()
        {
            rbContacto.Checked = false;
            rbContacto.Enabled = false;            
            cmbContacto.Enabled = false;
            cmbMotivo.Enabled = false;
            rbOtroContacto.Checked = false;
            rbOtroContacto.Enabled = false;
            txtOtroContacto.ReadOnly = true;
            dateFechaVisita.Enabled = false;
            txtObservaciones.ReadOnly = true;            
        }

        internal void setFormEditable()
        {
            rbContacto.Enabled = true;
            cmbContacto.Enabled = false;
            rbOtroContacto.Enabled = true;
            cmbMotivo.Enabled = true;
            txtOtroContacto.ReadOnly = false;
            dateFechaVisita.Enabled = true;
            txtObservaciones.ReadOnly = false;
        }

        internal void clearPanel()
        {
            idCliente = string.Empty;
            idVisita = string.Empty;
            
            txtRuc.ResetText();
            txtFechaRegistroCotizacion.ResetText();
            txtCliente.ResetText();

            rbContacto.Checked = false;
            rbOtroContacto.Checked = false;

            cmbContacto.DataSource = null;
            txtOtroContacto.ResetText();

            cmbMotivo.DataSource = null;
            cmbMotivo.Enabled = false;

            dateFechaVisita.ResetText();
            dateFechaVisita.Enabled = false;
            txtEstado.ResetText();
            txtObservaciones.ResetText();
        }

        private void rbContacto_CheckedChanged(object sender, EventArgs e)
        {
            if (rbContacto.Checked)
            {
                cmbContacto.Enabled = true;
            }
            else
            {
                cmbContacto.Enabled = false;
            }
        }

        private void rbOtroContacto_CheckedChanged(object sender, EventArgs e)
        {
            if (rbOtroContacto.Checked)
            {
                txtOtroContacto.Enabled = true;
            }
            else
            {
                txtOtroContacto.Enabled = false;
            }
        }

        internal void registrarVisita()
        {
            if (rbContacto.Checked || rbOtroContacto.Checked)
            {
                if (cmbMotivo.SelectedIndex >= 0)
                {
                    if (dateFechaVisita.Value.CompareTo(DateTime.Now.Date) >= 0)
                    {
                        if (rbContacto.Checked) //si selecciono Contacto
                        {
                            if (cmbContacto.SelectedIndex >= 0)
                            {
                                //registramos la visita
                                VISITA visita1 = new VISITA()
                                {
                                    idCliente = idCliente,
                                    idMotivo = cmbMotivo.SelectedValue.ToString(),
                                    idContacto = cmbContacto.SelectedValue.ToString(),
                                    nombreMotivo = (cmbMotivo.SelectedItem as MOTIVO).tipoMotivo,
                                    contactoEventual = (cmbContacto.SelectedItem as CONTACTO).nombre,
                                    fechaVisita = dateFechaVisita.Value.Date,
                                    fechaRegistro = DateTime.Now,
                                    estado = "Pendiente",
                                    observaciones = txtObservaciones.Text.Trim()
                                };

                                bool result = ctVisita.registrarVisita(visita1);

                                if (result)
                                {
                                    MessageBox.Show(this.ParentForm, "Visita registrada", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                                    this.clearPanel();
                                }
                                else
                                {
                                    MessageBox.Show(this.ParentForm, "Error al registrar visita", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show(this.ParentForm, "Seleccione el contacto", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                        else if (rbOtroContacto.Checked) //si selecciono otro contacto
                        {
                            if (!string.IsNullOrWhiteSpace(txtOtroContacto.Text))
                            {
                                //registramos la visita
                                VISITA visita2 = new VISITA()
                                {
                                    idCliente = idCliente,
                                    idMotivo = cmbMotivo.SelectedValue.ToString(),
                                    nombreMotivo = (cmbMotivo.SelectedItem as MOTIVO).tipoMotivo,
                                    contactoEventual = txtOtroContacto.Text,
                                    fechaVisita = dateFechaVisita.Value.Date,
                                    fechaRegistro = DateTime.Now,
                                    estado = "Pendiente",
                                    observaciones = txtObservaciones.Text.Trim()
                                };                                

                                bool result = ctVisita.registrarVisita(visita2);

                                if (result)
                                {
                                    MessageBox.Show(this.ParentForm, "Visita registrada", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                                    this.clearPanel();
                                }
                                else
                                {
                                    MessageBox.Show(this.ParentForm, "Error al registrar visita", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show(this.ParentForm, "El campo otro contacto se encuentra vacío", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show(this.ParentForm, "La fecha de Visita debe ser posterior a la fecha actual", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show(this.ParentForm, "Seleccione el motivo de la visita", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show(this.ParentForm, "Debe indicar un contacto para registrar la visita", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        internal void modificarVisita()
        {
            if (rbContacto.Checked || rbOtroContacto.Checked)
            {
                if (cmbMotivo.SelectedIndex >= 0)
                {
                    if (dateFechaVisita.Value.CompareTo(DateTime.Now.Date) >= 0)
                    {
                        if (rbContacto.Checked) //si selecciono Contacto
                        {
                            if (cmbContacto.SelectedIndex >= 0)
                            {
                                //registramos la visita
                                VISITA visita1 = new VISITA()
                                {
                                    idCliente = idCliente,
                                    idVisita = idVisita,
                                    idMotivo = cmbMotivo.SelectedValue.ToString(),
                                    nombreMotivo = (cmbMotivo.SelectedItem as MOTIVO).tipoMotivo,
                                    idContacto = cmbContacto.SelectedValue.ToString(),
                                    contactoEventual = (cmbContacto.SelectedItem as CONTACTO).nombre,
                                    fechaVisita = dateFechaVisita.Value.Date,
                                    fechaModificacion = DateTime.Now,
                                    estado = txtEstado.Text,
                                    observaciones = txtObservaciones.Text.Trim()
                                };

                                bool result = ctVisita.modificarVisita(visita1);

                                if (result)
                                {
                                    MessageBox.Show(this.ParentForm, "Visita modificada", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                                    this.clearPanel();
                                }
                                else
                                {
                                    MessageBox.Show(this.ParentForm, "Error al modificar visita", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show(this.ParentForm, "Seleccione el contacto", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                        else if (rbOtroContacto.Checked) //si selecciono otro contacto
                        {
                            if (!string.IsNullOrWhiteSpace(txtOtroContacto.Text))
                            {
                                //registramos la visita
                                VISITA visita2 = new VISITA()
                                {
                                    idCliente = idCliente,
                                    idVisita = idVisita,
                                    idMotivo = cmbMotivo.SelectedValue.ToString(),
                                    nombreMotivo = (cmbMotivo.SelectedItem as MOTIVO).tipoMotivo,
                                    idContacto = null,
                                    contactoEventual = txtOtroContacto.Text,
                                    fechaVisita = dateFechaVisita.Value.Date,
                                    fechaRegistro = DateTime.Now,
                                    estado = txtEstado.Text,
                                    observaciones = txtObservaciones.Text.Trim()
                                };

                                bool result = ctVisita.modificarVisita(visita2);

                                if (result)
                                {
                                    MessageBox.Show(this.ParentForm, "Visita modificada", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                                    this.clearPanel();
                                }
                                else
                                {
                                    MessageBox.Show(this.ParentForm, "Error al modificar visita", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show(this.ParentForm, "El campo otro contacto se encuentra vacío", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show(this.ParentForm, "La fecha de Visita debe ser posterior a la fecha actual", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show(this.ParentForm, "Seleccione el motivo de la visita", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show(this.ParentForm, "Debe indicar un contacto para registrar la visita", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }
    }
}
